<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Dual-rail MPI binding in Intel® MPI Library</title>
    <link>https://community.intel.com/t5/Intel-MPI-Library/Dual-rail-MPI-binding/m-p/947136#M2841</link>
    <description>&lt;P&gt;Dear expert,&lt;/P&gt;

&lt;P&gt;I seek confirmation that I am doing stuff properly. Here my situation. The new cluster in my institution has two Mellanox Connect-IB cards on each node. Each node is a dual socket six-core&amp;nbsp;Ivy Bridge. The node architecture is such that each socket is connected with a straight PCIe lane to each IB card. What I want to do is basically assign a subset of the MPI processes (e.g. the first 6) to first IB card and the other MPI processes to the second IB card. No rail sharing, for both small and large messages a MPI should use one single (assigned) IB card.&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Here what I did...&lt;/SPAN&gt;&lt;/P&gt;

&lt;BLOCKQUOTE&gt;
	&lt;P&gt;export I_MPI_FABRICS=shm:ofa&lt;/P&gt;

	&lt;P&gt;export I_MPI_OFA_NUM_ADAPTERS=2&lt;/P&gt;

	&lt;P&gt;export I_MPI_OFA_ADAPTER_NAME=mlx5_0,mlx5_1&lt;/P&gt;

	&lt;P&gt;export I_MPI_OFA_RAIL_SCHEDULER=PROCESS_BIND&lt;/P&gt;

	&lt;P&gt;export I_MPI_PIN_DOMAIN=core&lt;/P&gt;

	&lt;P&gt;export I_MPI_PIN_ORDER=scatter&lt;/P&gt;

	&lt;P&gt;export I_MPI_DEBUG=6&lt;/P&gt;

	&lt;P&gt;&amp;nbsp;&lt;/P&gt;

	&lt;P class="p1"&gt;mpirun -genvall -print-rank-map -np 24 -ppn 12 ./run_dual_bind &amp;lt;exe&amp;gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;

&lt;P class="p1"&gt;The "run_dual_bind" script contains...&lt;/P&gt;

&lt;BLOCKQUOTE&gt;
	&lt;P class="p1"&gt;#!/bin/bash&lt;/P&gt;

	&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

	&lt;P class="p1"&gt;lrank=$(($PMI_RANK % 12))&lt;/P&gt;

	&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

	&lt;P class="p1"&gt;case ${lrank} in&lt;/P&gt;

	&lt;P class="p1"&gt;0|1|2|3|4|5)&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export CUDA_VISIBLE_DEVICES=0&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export I_MPI_OFA_NUM_ADAPTERS=1&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export I_MPI_OFA_ADAPTER_NAME=mlx5_0&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; "$@"&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; ;;&lt;/P&gt;

	&lt;P class="p1"&gt;6|7|8|9|10|11)&lt;/P&gt;

	&lt;P class="p1"&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;&amp;nbsp; export I_MPI_OFA_NUM_ADAPTERS=1&lt;/SPAN&gt;&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export I_MPI_OFA_ADAPTER_NAME=mlx5_1&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; "$@"&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; ;;&lt;/P&gt;

	&lt;P class="p1"&gt;esac&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;

&lt;P class="p1"&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;In theory it should work. I can verify the MPI bindind looking at the mpirun output but I have no idea if the interconnect I want to use is really used.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;Am I doing stuff properly? Is this the exact way to realize fine-grain rail binding?&lt;/P&gt;

&lt;P&gt;Many thanks in advance.&amp;nbsp;I also take the opportunity to wish everybody a Happy New Year!&lt;/P&gt;

&lt;P&gt;Filippo&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 30 Dec 2013 12:30:59 GMT</pubDate>
    <dc:creator>Filippo_Spiga</dc:creator>
    <dc:date>2013-12-30T12:30:59Z</dc:date>
    <item>
      <title>Dual-rail MPI binding</title>
      <link>https://community.intel.com/t5/Intel-MPI-Library/Dual-rail-MPI-binding/m-p/947136#M2841</link>
      <description>&lt;P&gt;Dear expert,&lt;/P&gt;

&lt;P&gt;I seek confirmation that I am doing stuff properly. Here my situation. The new cluster in my institution has two Mellanox Connect-IB cards on each node. Each node is a dual socket six-core&amp;nbsp;Ivy Bridge. The node architecture is such that each socket is connected with a straight PCIe lane to each IB card. What I want to do is basically assign a subset of the MPI processes (e.g. the first 6) to first IB card and the other MPI processes to the second IB card. No rail sharing, for both small and large messages a MPI should use one single (assigned) IB card.&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;Here what I did...&lt;/SPAN&gt;&lt;/P&gt;

&lt;BLOCKQUOTE&gt;
	&lt;P&gt;export I_MPI_FABRICS=shm:ofa&lt;/P&gt;

	&lt;P&gt;export I_MPI_OFA_NUM_ADAPTERS=2&lt;/P&gt;

	&lt;P&gt;export I_MPI_OFA_ADAPTER_NAME=mlx5_0,mlx5_1&lt;/P&gt;

	&lt;P&gt;export I_MPI_OFA_RAIL_SCHEDULER=PROCESS_BIND&lt;/P&gt;

	&lt;P&gt;export I_MPI_PIN_DOMAIN=core&lt;/P&gt;

	&lt;P&gt;export I_MPI_PIN_ORDER=scatter&lt;/P&gt;

	&lt;P&gt;export I_MPI_DEBUG=6&lt;/P&gt;

	&lt;P&gt;&amp;nbsp;&lt;/P&gt;

	&lt;P class="p1"&gt;mpirun -genvall -print-rank-map -np 24 -ppn 12 ./run_dual_bind &amp;lt;exe&amp;gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;

&lt;P class="p1"&gt;The "run_dual_bind" script contains...&lt;/P&gt;

&lt;BLOCKQUOTE&gt;
	&lt;P class="p1"&gt;#!/bin/bash&lt;/P&gt;

	&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

	&lt;P class="p1"&gt;lrank=$(($PMI_RANK % 12))&lt;/P&gt;

	&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

	&lt;P class="p1"&gt;case ${lrank} in&lt;/P&gt;

	&lt;P class="p1"&gt;0|1|2|3|4|5)&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export CUDA_VISIBLE_DEVICES=0&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export I_MPI_OFA_NUM_ADAPTERS=1&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export I_MPI_OFA_ADAPTER_NAME=mlx5_0&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; "$@"&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; ;;&lt;/P&gt;

	&lt;P class="p1"&gt;6|7|8|9|10|11)&lt;/P&gt;

	&lt;P class="p1"&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;&amp;nbsp; export I_MPI_OFA_NUM_ADAPTERS=1&lt;/SPAN&gt;&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; export I_MPI_OFA_ADAPTER_NAME=mlx5_1&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; "$@"&lt;/P&gt;

	&lt;P class="p1"&gt;&amp;nbsp; ;;&lt;/P&gt;

	&lt;P class="p1"&gt;esac&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;

&lt;P class="p1"&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;In theory it should work. I can verify the MPI bindind looking at the mpirun output but I have no idea if the interconnect I want to use is really used.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;Am I doing stuff properly? Is this the exact way to realize fine-grain rail binding?&lt;/P&gt;

&lt;P&gt;Many thanks in advance.&amp;nbsp;I also take the opportunity to wish everybody a Happy New Year!&lt;/P&gt;

&lt;P&gt;Filippo&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 30 Dec 2013 12:30:59 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-MPI-Library/Dual-rail-MPI-binding/m-p/947136#M2841</guid>
      <dc:creator>Filippo_Spiga</dc:creator>
      <dc:date>2013-12-30T12:30:59Z</dc:date>
    </item>
  </channel>
</rss>

