99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Claude在MLIR代碼分析上完全超越了ChatGPT并表現(xiàn)十分驚艷

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 2023-04-24 14:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Claude在MLIR代碼分析上完全超越了ChatGPT并表現(xiàn)十分驚艷,請(qǐng)閱讀全文或者自己注冊(cè)感受它的強(qiáng)大。結(jié)論:在本文的任務(wù)中,Claude > ChatGPT >> NewBing

0x0. 前言

這里將以oneflow IR部分中的一個(gè)Codegen任務(wù)(目標(biāo)是在mlir codegen中支持oneflow stream,用oneflow stream替換pass中自己生成的stream,PR鏈接為:https://github.com/Oneflow-Inc/oneflow/pull/10149)為例,來(lái)對(duì)比一下newibing(chatgpt)和claude對(duì)mlir的理解能力。claude是Anthropic公司推出的類似于chatgpt的聊天機(jī)器人,這家公司是OpenAI的最大競(jìng)爭(zhēng)對(duì)手之一,因?yàn)閯?chuàng)辦這家公司的人也是OpenAI的前員工。然后Claude是參考這個(gè)issue: https://www.zhihu.com/question/594115372/answer/2988759047 將其直接添加到slack里進(jìn)行對(duì)話。

0x1. PR簡(jiǎn)介

PR鏈接為:https://github.com/Oneflow-Inc/oneflow/pull/10149

這個(gè)PR實(shí)現(xiàn)了3個(gè)Pass (定義在 OneFlowPasses.td),也就是:

defEliminateAllocOpsPass:Pass<"eliminate-alloc-ops","ModuleOp">{
letsummary="";
letconstructor="mlir::createEliminateAllocOpsPass()";
letdependentDialects=["pdl_interp::PDLInterpDialect","pdl::PDLDialect"];
}

defAppendOneFlowStreamPass:Pass<"append-ofstream","ModuleOp">{
letsummary="appendoneflowstreamtogpufunctionarguments";
letconstructor="mlir::createAppendOneFlowStreamPass()";
}

defMgpuToOneFlowStreamPass:Pass<"mgpu-to-ofstream","ModuleOp">{
letsummary="convertmlirabiaboutmgputooneflowstream,thispassshouldbeinvokedafterappend-ofstreampass";
letconstructor="mlir::createMgpuToOneFlowStreamPass()";
}

EliminateAllocOpsPass用來(lái)消除IR中的無(wú)效memref.alloc指令,AppendOneFlowStreamPass給GPU相關(guān)的函數(shù)添加GPU啟動(dòng)kernel需要的stream參數(shù),MgpuToOneFlowStreamPass發(fā)生在AppendOneFlowStreamPass執(zhí)行之后(它生成了stream參數(shù))并把mgpu相關(guān)的stream abi替換為oneflow stream abi。

我們分別使用newbing和claude來(lái)讓它們分析一下這幾行OneFlowPasses.td中定義的Pass意圖:

newbing:

2dfe90ee-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

newbing直接看不懂,其實(shí)我感覺(jué)claude也應(yīng)該看不懂吧,抱著懷疑的態(tài)度問(wèn)一下。

2e111e12-de7c-11ed-bfe3-dac502259ad0.png

2e1af2de-de7c-11ed-bfe3-dac502259ad0.png

太瘋狂了,claude不僅讀懂了td文件的代碼,甚至為我們列出了這個(gè)代碼涉及到的MLIR概念。感覺(jué)是訓(xùn)練數(shù)據(jù)考慮了MLIR相關(guān)的預(yù)料?接下來(lái)我們?cè)賹?duì)比下C++實(shí)現(xiàn)的Pass代碼。

0x2. 對(duì)比具體實(shí)現(xiàn)

PR鏈接為:https://github.com/Oneflow-Inc/oneflow/pull/10149

0x2.1 EliminateAllocOpsPass

EliminateAllocOpsPass使用MLIR提供的PDL語(yǔ)言來(lái)完成Pattern的匹配和重寫,具體實(shí)現(xiàn)在 oneflow/ir/lib/OneFlow/PDLL/AllocEliminationPatterns.pdll

#include"OneFlow/OneFlowOps.td"

ConstraintIsFuncArguments(value:Value)[{
returnsuccess(llvm::dyn_cast(value));
}];

Pattern{
letalloc=op();
letcopy=op(alloc.0,arg:IsFuncArguments);

rewriteallocwith{
erasecopy;
replaceallocwitharg;
};
}

接下來(lái),我們分別對(duì)比一下newbing和chatgpt對(duì)它的分析結(jié)果。

2e242188-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

newbing并不能解析出這段代碼是MLIR的PDL語(yǔ)言,當(dāng)然也無(wú)法理解代碼內(nèi)容。我們可以再使用Claude試試。

2e2e9d52-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

2e36e69c-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

個(gè)人感覺(jué)這個(gè)解釋是非常強(qiáng)大且精準(zhǔn)的,Claude的答案非常驚艷。

0x2.2 AppendOneFlowStreamPass

接下來(lái)我們看一下AppendOneFlowStreamPass的實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)是在oneflow/ir/lib/OneFlow/Transform/OneFlowStream.cpp這個(gè)文件,具體代碼如下:

structAppendOneFlowStreamPatternfinal:publicOpRewritePattern{
public:
explicitAppendOneFlowStreamPattern(mlir::MLIRContext*context)
:OpRewritePattern(context,/*benefit=*/0){}
mlir::LogicalResultmatchAndRewrite(func::FuncOpop,
mlir::PatternRewriter&rewriter)constoverride{
autoptr_type=LLVM::get(rewriter.getContext(),8));
if(llvm::dyn_cast(op.getFunctionType().getInputs().back()))
returnsuccess();

llvm::SmallVectornew_operand_type;
for(autotype:op.getFunctionType().getInputs()){new_operand_type.push_back(type);}
new_operand_type.push_back(ptr_type);
autofunction_type=
rewriter.getFunctionType(new_operand_type,op.getFunctionType().getResults());

autofunc=rewriter.create(op.getLoc(),op.getName(),function_type);
for(autopair:op->getDialectAttrs()){func->setAttr(pair.getName(),pair.getValue());}
op.getBody().addArgument(ptr_type,func->getLoc());
IRMappingbvm;
op.getRegion().cloneInto(&func.getRegion(),bvm);
rewriter.eraseOp(op);
returnsuccess();
}
};

c++代碼newbing(chatgpt)按道理可以看懂了,我們讓它分析一下:

2e3d7f84-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

直接問(wèn)chatgpt,它還是不懂這段代碼。我手動(dòng)提示了下它說(shuō),這段代碼定義了一個(gè)mlir pattern,然后它先是重復(fù)我的話給出了一段回答。然后接下來(lái)就是胡說(shuō)八道了,在這個(gè)例子中表現(xiàn)很差。接下來(lái)我們拷問(wèn)一下Claude:

2e487fa6-de7c-11ed-bfe3-dac502259ad0.png

2e52e428-de7c-11ed-bfe3-dac502259ad0.png

我們繼續(xù)問(wèn)一下c++代碼中的一些細(xì)節(jié):

2e5a5e4c-de7c-11ed-bfe3-dac502259ad0.png

2e620bd8-de7c-11ed-bfe3-dac502259ad0.png

非常強(qiáng)大,給出的解釋大多比較精準(zhǔn),并且似乎Claude真的完全理解了這段代碼的邏輯。我們需要注意的是,這段代碼是我同事今天才寫的,模型的泛化性真的很好。

MgpuToOneFlowStreamPass

我們最后再分析下MgpuToOneFlowStreamPass的實(shí)現(xiàn)。

structMgpuToOneFlowStreamPatternfinal:publicOpRewritePattern{
public:
explicitMgpuToOneFlowStreamPattern(mlir::MLIRContext*context)
:OpRewritePattern(context,/*benefit=*/0){}
mlir::LogicalResultmatchAndRewrite(LLVM::CallOpop,
mlir::PatternRewriter&rewriter)constoverride{
autoptr_type=LLVM::get(rewriter.getContext(),8));
autofunc=op->getParentOfType();
autocallee=op.getCallee();
if(!func||!callee)returnfailure();
Valuestream=func.getArguments().back();
if(stream.getType()!=ptr_type){
LOG(ERROR)<"failedtofindstreaminllvm.funcblockarguments";
returnfailure();
}

DenseMapstd::pair<std::function<bool(LLVM::CallOp&,Value&)>,
std::function<void(mlir::PatternRewriter&,LLVM::CallOp&,Value&)>>>
oneflow_abi={
{"mgpuStreamCreate",
{[](LLVM::CallOp&op,Value&stream){returntrue;},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
rewriter.replaceOp(op,{stream});
}}},
{"mgpuLaunchKernel",
{[](LLVM::CallOp&op,Value&stream){
unsignedidx=op->getNumOperands();
returnop.getOperand(idx-3)!=stream;
},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
unsignedidx=op->getNumOperands();
autotarget=op.getOperand(idx-3).getDefiningOp();
rewriter.replaceOp(target,{stream});
}}},
{"mgpuStreamSynchronize",
{[](LLVM::CallOp&op,Value&stream){returntrue;},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
rewriter.eraseOp(op);
}}},
{"mgpuStreamDestroy",
{[](LLVM::CallOp&op,Value&stream){returntrue;},
[](mlir::PatternRewriter&rewriter,LLVM::CallOp&op,Value&stream){
rewriter.eraseOp(op);
}}},
};
autoout=oneflow_abi.find(callee.value().str());
if(out!=oneflow_abi.end()&&out->getSecond().first(op,stream)){
out->getSecond().second(rewriter,op,stream);
}
returnsuccess();
}
};

還是先讓chatgpt分析下:

2e6e32dc-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

回答還是比較模棱兩可,并且可以確定的事情是chatgpt完全沒(méi)有理解這段代碼。

接下來(lái)還是使用Claude來(lái)測(cè)試下:

2e77c16c-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

這個(gè)地方讓我震驚的點(diǎn)是,它不僅理解了這段代碼,而且知道在MLIR里面這段代碼只是一個(gè)Pattern規(guī)則,如果要應(yīng)用這個(gè)規(guī)則需要在MLIR里面再構(gòu)建一個(gè)Pass。最后我們?cè)僮孋laude給我們一些Review意見(jiàn):

2e81ba8c-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

這里的第4點(diǎn)提示讓我感到有些疑惑,我還請(qǐng)教了下同事,順便讓同事補(bǔ)充一下注釋。

2e8889ca-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

整體來(lái)說(shuō),在閱讀MLIR代碼方面,Claude已經(jīng)相當(dāng)智能,全面領(lǐng)先Newbing(Chatgpt),感覺(jué)以后可以日常用Claude來(lái)輔助Review IR相關(guān)代碼。

0x3. 總結(jié)

我這里以MLIR的一個(gè)任務(wù)對(duì)比了一下ChatGpt和Claude,我感受到了Calude的強(qiáng)大之處。雖然暫時(shí)還沒(méi)有評(píng)測(cè)過(guò)別的任務(wù),但我已經(jīng)被Calude表現(xiàn)出來(lái)的代碼分析能力所震撼。我們甚至可以將Claude作為一個(gè)入門AI編譯器的入門工具

--------------------------------分割線-------------------------------------

評(píng)論區(qū)有朋友提出newbing的一些功能被限制了,并不等價(jià)于chatgpt3.5,我借了一個(gè)官方的chatgpt賬號(hào)重新測(cè)試了一下,以下是測(cè)試結(jié)果:

2e97d36c-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

2ea0b2fc-de7c-11ed-bfe3-dac502259ad0.png



就這個(gè)例子來(lái)說(shuō),chatgpt的解釋沒(méi)有Claude那么細(xì)節(jié),Claude的結(jié)果確實(shí)比chatgpt的好一點(diǎn),不過(guò)chatgpt確實(shí)知道這個(gè)是MLIR的Pass,不像newbing那樣被限制。

EliminateAllocOpsPass

接下來(lái)問(wèn)問(wèn) EliminateAllocOpsPass 的實(shí)現(xiàn):

2eaa1bb2-de7c-11ed-bfe3-dac502259ad0.png

2eb346a6-de7c-11ed-bfe3-dac502259ad0.png



我們可以對(duì)比下上面Calude的結(jié)果,感覺(jué)針對(duì)這個(gè)問(wèn)題ChatGPT的描述以及理解是不如Claude那么自然的。從這個(gè)回答里面我們并不能看出ChatGPT理解了這個(gè)實(shí)現(xiàn)的原理,而Claude則完全理解了。

2e36e69c-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

AppendOneFlowStreamPattern

2ec51750-de7c-11ed-bfe3-dac502259ad0.png

2ecddc32-de7c-11ed-bfe3-dac502259ad0.png

對(duì)比下Claude:

2e52e428-de7c-11ed-bfe3-dac502259ad0.png

在這里插入圖片描述

可以看到Claude的分析比ChatGPT好很多,它明確的知道if (llvm::dyn_cast(op.getFunctionType().getInputs().back())) 這行代碼是檢查當(dāng)前函數(shù)是否已經(jīng)有Stream參數(shù),而ChatGPT的回答則不知道這個(gè)指針類型的參數(shù)就代表Stream。

接下來(lái)是細(xì)節(jié)分析。

2ee601b8-de7c-11ed-bfe3-dac502259ad0.png

2eeef05c-de7c-11ed-bfe3-dac502259ad0.png

對(duì)比下Claude

2e5a5e4c-de7c-11ed-bfe3-dac502259ad0.png

Claude的解釋再次擊敗了ChatGPT

2f038170-de7c-11ed-bfe3-dac502259ad0.png

對(duì)比下Claude

2e620bd8-de7c-11ed-bfe3-dac502259ad0.png

可以看到Claude的結(jié)果顯然也是更優(yōu)的,不僅為我們解釋了所有細(xì)節(jié)還列出了用到的MLIR相關(guān)屬性和接口。

MgpuToOneFlowStreamPass

我們最后再分析下MgpuToOneFlowStreamPass的實(shí)現(xiàn)。

2f17f79a-de7c-11ed-bfe3-dac502259ad0.png

對(duì)比Claude

2e77c16c-de7c-11ed-bfe3-dac502259ad0.png

Claude的結(jié)果也顯著優(yōu)于ChatGPT,并且可以發(fā)現(xiàn)ChatGPT的回答里面還漏掉了一個(gè)mgpuStreamSynchronize ABI。最后,我們?cè)賳?wèn)一下ChatGPT能不能給出一些修改意見(jiàn)。

2f2e9e96-de7c-11ed-bfe3-dac502259ad0.png

感覺(jué)和Claude差不多。

結(jié)論2

整體來(lái)看,在這個(gè)Review MLIR代碼的任務(wù)中,Claude > ChatGPT >> NewBing

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 聊天機(jī)器人
    +關(guān)注

    關(guān)注

    0

    文章

    348

    瀏覽量

    12800
  • ChatGPT
    +關(guān)注

    關(guān)注

    29

    文章

    1590

    瀏覽量

    9107

原文標(biāo)題:結(jié)論2

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    十分

    誰(shuí)能幫我看看VHDL編的十分頻圖里19行以下不理解了。一上升沿q就等于1?。吭趺醋?
    發(fā)表于 08-31 09:46

    十分鐘學(xué)會(huì)ISE

    十分鐘學(xué)會(huì)ISE
    發(fā)表于 03-26 09:39

    十分鐘學(xué)會(huì)ISE

    十分鐘學(xué)會(huì)ISE
    發(fā)表于 09-05 22:49

    IC設(shè)計(jì)/驗(yàn)證中怎么應(yīng)用ChatGPT呢?

    好用,那么對(duì)于工程師群體應(yīng)該幫助很大!按照官網(wǎng)的介紹,工程師們完全可以把所要實(shí)現(xiàn)的邏輯步驟用自然語(yǔ)言描述清楚,然后ChatGPT會(huì)翻譯出滿足相應(yīng)要求的代碼進(jìn)行實(shí)現(xiàn)。話不多說(shuō),如圖2直接上干貨進(jìn)行測(cè)試!圖
    發(fā)表于 02-21 15:16

    科技大廠競(jìng)逐AIGC,中國(guó)的ChatGPT在哪?

    產(chǎn)業(yè)版ChatGPT--ChatJD。 可見(jiàn),大廠的態(tài)度十分鮮明:ChatGPT已經(jīng)是既定的未來(lái),這場(chǎng)新的科技競(jìng)技賽哨聲響起,誰(shuí)都不甘落于下風(fēng)。從科技巨頭,到行業(yè)龍頭,中國(guó)企業(yè)競(jìng)逐AI賽道,AIGC(利用
    發(fā)表于 03-03 14:28

    十分鐘學(xué)會(huì)Xilinx FPGA 設(shè)計(jì)

    十分鐘學(xué)會(huì)Xilinx FPGA 設(shè)計(jì) Xilinx FPGA設(shè)計(jì)基礎(chǔ)系統(tǒng)地介紹Xilinx公司FPGA的結(jié)構(gòu)特點(diǎn)和相關(guān)開(kāi)發(fā)軟件的使用方法,詳細(xì)描述VHDL語(yǔ)言的語(yǔ)法和設(shè)計(jì)方法,
    發(fā)表于 03-15 15:09 ?178次下載

    紅魔Mars游戲性能實(shí)測(cè) 表現(xiàn)十分穩(wěn)定

    紅魔Mars游戲性能實(shí)測(cè) 表現(xiàn)十分穩(wěn)定
    的頭像 發(fā)表于 07-02 11:20 ?5624次閱讀

    AI編譯器:ChatGptClaude有何區(qū)別

    整體來(lái)說(shuō),閱讀MLIR代碼方面,Claude已經(jīng)相當(dāng)智能,全面領(lǐng)先Newbing(Chatgpt),感覺(jué)以后可以日常用
    發(fā)表于 04-19 10:23 ?2269次閱讀

    ClaudeMLIR代碼分析完全超越ChatGPT

    EliminateAllocOpsPass用來(lái)消除IR中的無(wú)效memref.alloc指令,AppendOneFlowStreamPass給GPU相關(guān)的函數(shù)添加GPU啟動(dòng)kernel需要的stream參數(shù),MgpuToOneFlowStreamPass發(fā)生在AppendOneFlowStreamPass執(zhí)行之后(它生成了stream參數(shù))并把mgpu相關(guān)的stream abi替換為oneflow stream abi。
    的頭像 發(fā)表于 04-19 10:25 ?1501次閱讀

    如何設(shè)計(jì)MLIR的Dialect來(lái)GPU生成高性能的代碼?

    為什么又要開(kāi)一個(gè)新坑?原因是,最近在做的項(xiàng)目都是和MLIR有關(guān),并且發(fā)現(xiàn)自己已經(jīng)MLIR的研發(fā)道路上越走越遠(yuǎn)了。
    的頭像 發(fā)表于 05-10 14:57 ?2458次閱讀
    如何設(shè)計(jì)<b class='flag-5'>MLIR</b>的Dialect來(lái)<b class='flag-5'>在</b>GPU<b class='flag-5'>上</b>生成高性能的<b class='flag-5'>代碼</b>?

    ChatGPT最強(qiáng)競(jìng)品Claude2來(lái)代碼、GRE 成績(jī)超越GPT-4,免費(fèi)可用

    機(jī)器之心在此前的文章中多次介紹過(guò) Claude,它是由 OpenAI 離職人員創(chuàng)建的 Anthropic 公司打造的。 ChatGPT 發(fā)布兩個(gè)月后,該公司就迅速開(kāi)發(fā)出了 Claude
    的頭像 發(fā)表于 07-14 15:21 ?1265次閱讀
    <b class='flag-5'>ChatGPT</b>最強(qiáng)競(jìng)品<b class='flag-5'>Claude</b>2來(lái)<b class='flag-5'>了</b>:<b class='flag-5'>代碼</b>、GRE 成績(jī)<b class='flag-5'>超越</b>GPT-4,免費(fèi)可用

    你的自選股里,99%的ChatGPT概念股沒(méi)有技術(shù)含量

    Claude是人工智能初創(chuàng)公司Anthropic發(fā)布的一款類似ChatGPT的軟件,它的創(chuàng)始團(tuán)隊(duì)基本都是來(lái)自O(shè)penAI,被谷歌注資。從體驗(yàn)上來(lái)說(shuō),是目前僅次于
    的頭像 發(fā)表于 08-14 11:36 ?1114次閱讀
    你的自選股里,99%的<b class='flag-5'>ChatGPT</b>概念股沒(méi)有技術(shù)含量

    如何適配新架構(gòu)?TPU-MLIR代碼生成CodeGen全解析!

    背景介紹TPU-MLIR的CodeGen是BModel生成的最后一步,該過(guò)程目的是將MLIR文件轉(zhuǎn)換成最終的Bmodel。本文介紹CodeGen的基本原理和流程,記錄了針對(duì)BM16
    的頭像 發(fā)表于 11-02 08:34 ?2274次閱讀
    如何適配新架構(gòu)?TPU-<b class='flag-5'>MLIR</b><b class='flag-5'>代碼</b>生成CodeGen全解析!

    Anthropic 發(fā)布 Claude 3 系列大模型和 AI 助手

    表現(xiàn)超越 GPT-4/3.5 和 Gemini 1.0 Ultra/Pro。 ? 目前Opus 和 Sonnet 已可通過(guò) claude網(wǎng)站和
    的頭像 發(fā)表于 03-08 12:29 ?674次閱讀

    Claude 3 Haiku模型Amazon Bedrock正式可用

    ,其中Claude 3 Haiku模型已經(jīng)亞馬遜云科技的Amazon Bedrock平臺(tái)上正式上線,為用戶提供更快速、更緊湊的生成式人工智能體驗(yàn)。
    的頭像 發(fā)表于 03-19 11:12 ?1007次閱讀