ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

文章对比了Claude、ChatGPT和NewBing在理解与分析MLIR代码任务上的性能。Claude在理解复杂代码结构、PDL模式和Pass实现上表现出色,明显超越了ChatGPT和NewBing,显示出强大的代码分析能力,适合辅助IR代码审查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Claude在MLIR代码分析上完全超越了ChatGPT并表现十分惊艳,请阅读全文或者自己注册感受它的强大。结论:在本文的任务中,Claude > ChatGPT >> NewBing

0x0. 前言

这里将以oneflow IR部分中的一个Codegen任务(目标是在mlir codegen中支持oneflow stream,用oneflow stream替换pass中自己生成的stream,PR链接为:https://github.com/Oneflow-Inc/oneflow/pull/10149)为例,来对比一下newibing(chatgpt)和claude对mlir的理解能力。claude是Anthropic公司推出的类似于chatgpt的聊天机器人,这家公司是OpenAI的最大竞争对手之一,因为创办这家公司的人也是OpenAI的前员工。然后Claude是参考这个issue: https://www.zhihu.com/question/594115372/answer/2988759047 将其直接添加到slack里进行对话。

0x1. PR简介

PR链接为:https://github.com/Oneflow-Inc/oneflow/pull/10149

这个PR实现了3个Pass (定义在 OneFlowPasses.td),也就是:

def EliminateAllocOpsPass : Pass<"eliminate-alloc-ops", "ModuleOp"> {
   
  let summary = "";
  let constructor = "mlir::oneflow::createEliminateAllocOpsPass()";
  let dependentDialects = ["pdl_interp::PDLInterpDialect", "pdl::PDLDialect"];
}

def AppendOneFlowStreamPass : Pass<"append-ofstream", "ModuleOp"> {
   
  let summary = "append oneflow stream to gpu function arguments";
  let constructor = "mlir::oneflow::createAppendOneFlowStreamPass()";
}

def MgpuToOneFlowStreamPass : Pass<"mgpu-to-ofstream", "ModuleOp"> {
   
  let summary = "convert mlir abi about mgpu to oneflow stream, this pass should be invoked after append-ofstream pass";
  let constructor = "mlir::oneflow::createMgpuToOneFlowStreamPass()";
}

EliminateAllocOpsPass用来消除IR中的无效memref.alloc指令,AppendOneFlowStreamPass给GPU相关的函数添加GPU启动kernel需要的stream参数,MgpuToOneFlowStreamPass发生在AppendOneFlowStreamPass执行之后(它生成了stream参数)并把mgpu相关的stream abi替换为oneflow stream abi。

我们分别使用newbing和claude来让它们分析一下这几行OneFlowPasses.td中定义的Pass意图:

newbing:

在这里插入图片描述

newbing直接看不懂,其实我感觉claude也应该看不懂吧,抱着怀疑的态度问一下。

在这里插入图片描述
在这里插入图片描述

太疯狂了,claude不仅读懂了td文件的代码,甚至为我们列出了这个代码涉及到的MLIR概念。感觉是训练数据考虑了MLIR相关的预料?接下来我们再对比下C++实现的Pass代码。

0x2. 对比具体实现

PR链接为:https://github.com/Oneflow-Inc/oneflow/pull/10149

0x2.1 EliminateAllocOpsPass

EliminateAllocOpsPass使用MLIR提供的PDL语言来完成Pattern的匹配和重写,具体实现在 oneflow/ir/lib/OneFlow/PDLL/AllocEliminationPatterns.pdll

#include "OneFlow/OneFlowOps.td"

Constraint IsFuncArguments(value: Value) [{
   
  return success(llvm::dyn_cast<mlir::BlockArgument>(value));
}];

Pattern {
   
  let alloc = op<memref.alloc>();
  let copy = op<memref.copy>(alloc.0, arg: IsFuncArguments);

  rewrite alloc with {
   
    erase copy;
    replace alloc with arg;
  };
}

接下来,我们分别对比一下newbing和chatgpt对它的分析结果。

在这里插入图片描述

newbing并不能解析出这段代码是MLIR的PDL语言,当然也无法理解代码内容。我们可以再使用Claude试试。

在这里插入图片描述

在这里插入图片描述

个人感觉这个解释是非常强大且精准的,Claude的答案非常惊艳。

0x2.2 AppendOneFlowStreamPass

接下来我们看一下AppendOneFlowStreamPass的实现,这个实现是在oneflow/ir/lib/OneFlow/Transform/OneFlowStream.cpp这个文件,具体代码如下:

struct AppendOneFlowStreamPattern final :
### ChatGPT Claude AI 聊天机器人的特性差异 #### 特性对比 ChatGPT Claude 均属于先进的大型语言模型 (LLM),旨在通过自然对话的方式提供帮助支持。然而,在具体特性应用场景上存在一些显著的不同。 对于 **ChatGPT** ,其主要特点在于强大的上下文理解能力,能够根据用户的输入生成连贯且具有逻辑性的回复[^1]。此外,该平台不断更新迭代,持续优化用户体验,并支持多轮次交互,使得对话更加流畅自然。值得注意的是,尽管 ChatGPT 对编程有一定的理解辅助能力,但它主要是针对文本交流进行了优化,而非专门面向代码开发场景。 相比之下,**Claude** 更侧重于企业级应用服务集成方面的能力提升。它提供了更灵活的安全策略配置选项,允许管理员自定义访问权限控制规则;同时具备更好的跨平台兼容性,可以轻松嵌入到各种业务流程当中去。另外,Claude 支持更为丰富的 API 接口调用方式,方便开发者构建定制化的解决方案[^2]。 #### 应用领域 由于两者的设计初衷有所区别——前者偏向通用型的人机互动体验改进,后者则致力于满足特定行业需求下的复杂任务自动化处理——因此它们各自擅长的应用范围也有所不同: - **ChatGPT** :适合用于教育辅导、娱乐休闲等领域内的日常问答咨询; - **Claude** :更适合应用于金融风控、客户服务等对企业安全合规性有较高要求的工作环境中。 ```python # Python 伪代码展示两个系统的典型用途区分 if user_input.startswith('解释'): response = "这可能是ChatGPT的回答" elif user_input.endswith('报告'): response = "这更像是Claude的任务" else: response = "无法确定哪个系统更适合此请求" ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值