标签: pipeline

并行流水线

 (fileNameToCharStream "bigfile"
 |>> fuse [length;
           splitBy (fun x -> x = ' ' || x = '\n') removeEmpty |>> length;
           splitBy (fun x -> x = '\n') keepEmpty |>> length;
         ])
  (*fuse "fuses" the three functions to run concurrently*)
 |> run 2  (*forces to run in parallel on two threads*)
 |> (fun [num_chars; num_words; num_lines] -> 
       printfn "%d %d %d"
           num_chars num_words, num_lines))

我想以下列方式使这段代码工作:将原始流分成两个正好在中间; 然后为每一半运行一个单独的计算,计算3件事:长度(即字符数),字数,行数.但是,如果我错误地将一个单词分开,我不想有问题.这必须得到照顾.该文件应该只读一次.

我应该如何编程指定的函数和运算符| >>?可能吗?

parallel-processing f# pipeline

8
推荐指数
1
解决办法
843
查看次数

在PowerShell管道上输出二进制数据

我需要将一些数据传递给程序的stdin.

  1. 前4个字节是32位无符号整数,表示数据的长度.这4个字节与C在内存中存储unsigned int完全相同.我将其称为二进制数据.
  2. 剩余的字节是数据.

在c中,这是微不足道的:

WriteFile(h, &cb, 4);  // cb is a 4 byte integer
WriteFile(h, pData, cb);
Run Code Online (Sandbox Code Playgroud)

要么

fwrite(&cb, sizeof(cb), 1, pFile);
fwrite(pData, cb, 1, pFile);
Run Code Online (Sandbox Code Playgroud)

或者c#你会使用BinaryWriter(我认为这段代码是对的,我现在没有c#,...)

Bw.Write((int)Data.Length);
Bw.Write(Data, 0, Data.Length);
Run Code Online (Sandbox Code Playgroud)

在PowerShell中我确信它是可能的,但这是我能得到的尽可能接近.这显然是将4个字节的大小打印为4个人类可读数字:

$file = "c:\test.txt"
Set-content $file "test data" -encoding ascii
[int]$size = (Get-ChildItem $file).Length
$bytes = [System.BitConverter]::GetBytes($size)
$data = Get-content $file
$bytes
$data

11
0
0
0
test data
Run Code Online (Sandbox Code Playgroud)

我需要在管道上发送的二进制数据看起来像这样(\ xA是不可打印字符的转义表示,我不想在输出中使用'\',我想要'\ xA'表示的BYTE输出) :

\xA\x0\x0\0test data
Run Code Online (Sandbox Code Playgroud)

我不知道如何以二进制格式写出管道中的字节数组.我也不知道如何摆脱回车.

编辑: 我发现我可以这样做:

$file = "c:\test.txt"
Set-content $file "test data" -encoding ascii
"File: …
Run Code Online (Sandbox Code Playgroud)

binary powershell pipeline

8
推荐指数
2
解决办法
9851
查看次数

从终端运行并从Python运行时,脚本的工作方式不同

我有一个简短的bash脚本 foo.sh

#!/bin/bash

cat /dev/urandom | tr -dc 'a-z1-9' | fold -w 4 | head -n 1
Run Code Online (Sandbox Code Playgroud)

当我直接从shell运行它时,它运行正常,完成时退出

$ ./foo.sh 
m1un
$
Run Code Online (Sandbox Code Playgroud)

但是当我从Python运行它时

$ python -c "import subprocess; subprocess.call(['./foo.sh'])"
ygs9
Run Code Online (Sandbox Code Playgroud)

它输出线但然后永远挂起.造成这种差异的原因是什么?

python bash subprocess pipeline

8
推荐指数
1
解决办法
517
查看次数

使用预配置的作业创建Jenkins Docker Image

我创建了一堆本地部署管道作业,这些作业执行的操作包括删除现有容器,在本地构建服务,构建docker镜像,运行容器等等.这些不是CI/CD作业,只是用于部署的小型管道在开发期间本地

我现在要做的就是让所有开发人员都可以使用它,这样他们就可以简单地启动已经包含作业的jenkins的本地实例.

我的docker文件相当直接......

FROM jenkins:latest

USER root

RUN apt-get update
RUN apt-get install -y sudo

RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers

# Docker
RUN apt-get update
RUN apt-get dist-upgrade -y
RUN apt-get install apt-transport-https ca-certificates -y
RUN sh -c "echo deb https://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list"
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
RUN apt-get update
RUN apt-cache policy docker-engine
RUN apt-get install docker-engine -y

# .NET Core CLI dependencies
RUN echo "deb [arch=amd64] http://llvm.org/apt/jessie/ llvm-toolchain-jessie-3.6 main" > /etc/apt/sources.list.d/llvm.list …
Run Code Online (Sandbox Code Playgroud)

pipeline jenkins docker

8
推荐指数
2
解决办法
3522
查看次数

C#流水线函数数组签名

c#的类型系统是否能够指定一个函数,该函数接受可以通过形成管道的多个函数?

效果类似于链接,而不是

var pipeline = a.Chain(b).Chain(c)
Run Code Online (Sandbox Code Playgroud)

一个人可以写

var pipeline = CreatePipeline(a,b,c)
Run Code Online (Sandbox Code Playgroud)

哪个a,b和c是函数?我已经包含了一些示例代码来说明,谢谢.

void Main()
{
    Func<int, string>       a = i => i.ToString();
    Func<string, DateTime>  b = s => new DateTime(2000,1,1).AddDays(s.Length);
    Func<DateTime, bool>    c = d => d.DayOfWeek == DayOfWeek.Wednesday;

    //var myPipeline = CreatePipeline(a, b, c);

    Func<int, bool> similarTo =  i => c(b(a(i))) ;

    Func<int, bool> isThisTheBestWeCanDo = a.Chain(b).Chain(c);

}

public static class Ext{

    //public static Func<X, Z> CreatePipeline<X,Z>(params MagicFunc<X..Y>[] fns) {
    //  return 
    //}

    public static Func<X, Z> Chain<X,Y,Z>(this Func<X,Y> …
Run Code Online (Sandbox Code Playgroud)

c# pipeline chaining

8
推荐指数
1
解决办法
104
查看次数

在预测现代超标量处理器上的操作延迟时需要考虑哪些因素以及如何手动计算它们?

我希望能够手动预测任意算术的长度(即没有分支或内存,尽管这也很好)x86-64汇编代码将采用特定的体系结构,考虑到指令重新排序,超标量,延迟,消费者价格指数等

什么/描述必须遵循的规则才能实现这一目标?


我想我已经找到了一些初步规则,但是我没有找到任何关于将任何示例代码分解为这个详细程度的引用,所以我不得不做一些猜测.(例如,英特尔优化手册甚至几乎没有提到指令重新排序.)

至少,我正在寻找(1)确认每条规则是正确的,或者是每条规则的正确陈述,以及(2)我可能忘记的任何规则的列表.

  • 每个循环发出尽可能多的指令,从当前循环开始按顺序开始,并且可能与重新排序缓冲区大小一样远.
  • 如果出现以下情况,可以在给定周期发出指令:
    • 没有影响其操作数的指令仍在执行中.和:
    • 如果它是浮点指令,则它之前的每个浮点指令都被发出(浮点指令具有静态指令重新排序).和:
    • 该循环有一个功能单元可用于该指令.每个(?)功能单元是流水线的,这意味着它可以在每个周期接受1个新指令,并且对于给定功能类的CPI,总功能单元的数量是1/CPI(这里模糊不清:可能是例如addps并且subps使用相同的功能) unit?我如何确定?).和:
    • 4此循环已经发出少于超标量宽度(通常)指令的数量.
  • 如果不能发出指令,则处理器不会发出任何称为"停顿"的条件.

例如,请考虑以下示例代码(计算交叉产品):

shufps   xmm3, xmm2, 210
shufps   xmm0, xmm1, 201
shufps   xmm2, xmm2, 201
mulps    xmm0, xmm3
shufps   xmm1, xmm1, 210
mulps    xmm1, xmm2
subps    xmm0, xmm1
Run Code Online (Sandbox Code Playgroud)

我试图预测Haswell的延迟看起来像这样:

; `mulps`  Haswell latency=5, CPI=0.5
; `shufps` Haswell latency=1, CPI=1
; `subps`  Haswell latency=3, CPI=1

shufps   xmm3, xmm2, 210   ; cycle  1
shufps   xmm0, xmm1, 201   ; cycle  2
shufps   xmm2, xmm2, 201   ; …
Run Code Online (Sandbox Code Playgroud)

assembly pipeline latency x86-64 superscalar

8
推荐指数
1
解决办法
268
查看次数

Gitlab CI:仅在工件存在时运行作业

我有 monorepo,我想根据已更改的目录内容运行子管道。在工作中prepare_config,我检查最新更改在哪里,创建子配置 yml,并在下一阶段的工作中run_child从 运行子管道。

问题是,如果model-gitlab-ci.yml不存在,则作业run_child会失败,而不是由于缺少工件而跳过。我搜索了仅在工件存在而不是失败时有条件运行作业的解决方案,但没有找到任何解决方案。也许这里有人有什么想法?

.gitlab-ci.yml:

stages:
  - .pre
  - build

prepare_config:
  stage: .pre
  tags:
    - sometag
  rules:
    - if: $CI_COMMIT_TAG == null
      when: always
      changes:
      - '.gitlab-ci.yml'
      - 'DIR_A/**/*'
      - 'DIR_B/**/*'
      - 'DIR_C/**/*'
  script:
    - |-
      files=$(git diff-tree --name-only --no-commit-id ${CI_MERGE_REQUEST_TARGET_BRANCH_SHA:-$CI_COMMIT_SHA})
      echo "Files changed: $files"
      for f in $files; do
        if [ -d $f ]; then
          sed "s/{{ MODEL_NAME }}/$f/g" .gitlab-ci-template.yml >> model-gitlab-ci.yml
        fi
      done
  artifacts:
    paths:
      - "model-gitlab-ci.yml"

run_child: …
Run Code Online (Sandbox Code Playgroud)

continuous-integration pipeline continuous-delivery gitlab gitlab-ci

8
推荐指数
1
解决办法
9661
查看次数

Jenkins-Github/Git - “验证存储库信息时出错。凭据正常。”

在 Jenkins 上,在 Jenkins 上使用“Github”设置多分支设置时,我收到奇怪的错误:

Error validating repository information. Credentials ok.
Run Code Online (Sandbox Code Playgroud)

但是,相同的凭据适用于“git”作为“添加源”类别,但如果添加为“添加源”,则不适用于“github”。这是 github 的实际凭证,我可以登录 github 门户,不确定这里发生了什么。任何指点。谢谢

git pipeline github jenkins multibranch-pipeline

8
推荐指数
1
解决办法
4531
查看次数

分支管道的“此管道没有阶段/作业”

鉴于以下情况.gitlab-ci.yml

---
stages:
  - .pre
  - test
  - build

compile-build-pipeline:
  stage: .pre
  script: [...]
  artifacts:
    paths: [".artifacts/build.yaml"]

lint-source:
  stage: .pre
  script: [...]

run-tests:
  stage: test
  rules:
    - if: '$CI_COMMIT_BRANCH == "$CI_DEFAULT_BRANCH"'
  trigger:
    strategy: depend
    include:
      artifact: .artifacts/tests.yaml
      job: "compile-test-pipeline"
  needs: ["compile-test-pipeline"]

build-things:
  stage: test
  rules:
    - if: '$CI_COMMIT_BRANCH == "$CI_DEFAULT_BRANCH"'
  trigger:
    strategy: depend
    include:
      artifact: .artifacts/build.yaml
      job: "compile-build-pipeline"
  needs: ["compile-build-pipeline"]
...
Run Code Online (Sandbox Code Playgroud)

配置应该始终运行(任何分支,任何源)。测试和构建作业应仅在默认分支上运行。

但是,不会为合并请求运行任何作业,并且在默认分支以外的分支上手动触发管道会出现错误No Jobs/Stages for this Pipeline

我尝试明确设置用于阶段rules: [{if: '$CI_PIPELINE_SOURCE'}]中作业的始终运行规则.pre,但没有骰子。

我究竟做错了什么?

pipeline gitlab-ci

8
推荐指数
1
解决办法
2万
查看次数

Gitlab 将值从子管道传递到父管道

我有一个 monorepo,每个包都应该构建为 docker。当所有更改的包都进行了 dockerized 后,我想使用 helmfile 进行部署

我为触发子管道的每个包创建了一个触发器作业。

我正在寻找一种方法来获取子管道中生成的值,例如父管道中的 docker 标签或图表版本。

我需要将这些值用于所有子管道完成后发生的部署阶段。

.gitlab-ci.yml

---
trigger-package-a:
  stage: build
  trigger:
    include: .gitlab/ci/packages/package-gitlab-ci.yml
    strategy: depend
  rules:
   - changes:
      - "packages/package-a/**/*"
  variables:
    PACKAGE: package-a

trigger-package-b:
  stage: build
  trigger:
    include: .gitlab/ci/packages/package-gitlab-ci.yml
    strategy: depend
  rules:
    - changes:
      - "packages/package-b/**/*"
  variables:
    PACKAGE: package-b

done_job:
  stage: deploy
  script:
    - "echo DONE"
    - "cat config.json"
stages:
  - build
  - deploy
Run Code Online (Sandbox Code Playgroud)

包-gitlab-ci.yml

stages:
  - bootstrap
  - validate

cache:
  key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
  paths:
    - packages/${PACKAGE}/node_modules/
  policy: pull

install-package:
  stage: bootstrap
  script:
    - …
Run Code Online (Sandbox Code Playgroud)

pipeline parent-child gitlab gitlab-ci

8
推荐指数
1
解决办法
3691
查看次数